// 使用：
// import { dynamicTableColGlobalManager } from "@/components/SearchTable/classes/DynamicTableColGlobalManage.js";

import db from "utils/localstorage/main.js";

/** @deprecated 动态表格列 全局储存对象的 缓存读取名称 对外导出无意义 */
const dynamicTableColGlobalStoreName = "dynamicTableColGlobalStore";

class DynamicTableColGlobalManage {
  constructor() {
    /** 浏览器缓存的取值键名 */
    this.localStorageKeyname = "dynamicTableColGlobalStore";

    /** 当取值为空时 取值失败时 默认提供的对象 */
    this.defaultNullValue = {};

    /** 本地储存对象 无条件地从缓存中读取值 */
    this.store = db.get(this.localStorageKeyname, this.defaultNullValue);
  }

  /** @deprecated 设计无意义 */
  static isEmptyObj(target = {}) {
    // https://blog.csdn.net/weixin_43867717/article/details/124063347
    return !!Object.keys(target).length;
  }

  /** 初始化储存对象 这个函数目前设计在全局路由守卫处执行一次 */
  initStore() {
    // 在本地缓存中读取值，可能会读取出一个空键值对对象
    const targetStore = db.get(this.localStorageKeyname, {});
    // 保存数据至缓存 不管是有缓存的值，还是无缓存的值，都做一次主动的保存。
    db.save(this.localStorageKeyname, targetStore);
  }

  /** 根据路由名称 从储存的变量内读取所选择的数组 读取失败时返回一个空数组
   * @return {Array} 返回值为数组 可能是已选择项的数组 可能是空数组
   */
  get(routeKeyname = "") {
    return this.store[routeKeyname] || [];
  }

  set(routeKeyname = "", toStoreList = []) {
    let store = this.store;
    Object.assign(store, { [routeKeyname]: toStoreList });
    db.save(this.localStorageKeyname, store);
  }
}

const dynamicTableColGlobalManager = new DynamicTableColGlobalManage();

export {
  /** @type {DynamicTableColGlobalManage} */
  dynamicTableColGlobalManager,
  /** @type {string} */
  dynamicTableColGlobalStoreName,
};
